数据库完整性(实体完整性,参照完整性,用户定义完整性) |
您所在的位置:网站首页 › millipak200 完整性 › 数据库完整性(实体完整性,参照完整性,用户定义完整性) |
数据库完整性:
指数据库中数据的正确性、相容性
正确性:保证进入数据库的数据是符合语义约束的合法数据相容性:同一个事实的两个数据应当是一致的
为了维护数据库的定义完整性: DBMS必须具备三个功能:(完整性定义、检查控制、违约处理都是由DBMS来完成) (1)提供定义完整性条件约束的机制(实体完整性,参照完整性,用户定义完整性) (2)提供完整性检查的方法(一般在 insert 、update 、delete、等语句执行后检查) (3)违约处理 完整性约束条件的分类①就被约束的数据对象而言,完整性约束又可以分为如下表所示的四种类型 约束类型 含义 类型/域约束 说明给定类型的合法取值 用户自定义的完整性 属性约束 说明属性的合法取值 用户自定义的完整性 关系约束 说明关系的合法取值 实体完整性/用户自定义的完整性 数据库约束 说明数据库的合法取值,通常涉及多个关系 实体完整性/用户自定义的完整性 ②从约束的状态的角度,约束还可以分静态约束和动态约束 静态约束是关于数据库正确状态的约束 动态约束是数据库从一种正确状态转移到另一种状态的转移约束 实体完整性(两个关系的不变性之一):关系模型的实体完整性在 create table 中用 primary key (主键) 定义。 单属性构成的码有两种说明方法:(1)定义列级约束条件 (2)定义表级约束条件 多属性构成的码只有一种说明方法 : 定义表级约束条件 建议都使用表级约束条件!(可使条件更加清晰) ①实体完整性定义: 每个关系应该有一个主码(可唯一标识表中的一条记录),每个元组的主码值惟一确定该元组 主码的任何属性都不能取空值 ②违反实体完整性规则的操作 插入(insert)新元组时可能破坏实体完整性规则(DBMS自动检查主码是否为空)修改(updata)元组的主码时可能破坏实体完整性规则(DBMS自动检查主码是否为空) DBMS应该自动检查是否导致违反实体完整性约束,并拒绝导致破坏实体完整性约束的任何插入或修改 SQL支持实体完整性。用户只需要在创建基本表时说明关系的主码,系统就能够自动地保证实体完整性
参照完整性 ( P46 ) :实现这种引用规则(一对一,多对多),要求外码的取值只是被参照表主码的值或者取空值 关系模型的参照完整性在 create table 中用 foreign key 短语定义那些列为外码 用 references 短语指明这些外码参照哪些表的主码 foreign key (A1,...,An) references () [] --指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝 --参照触发动作可以是以下两种 on update [on delete ] on delete [on update ] --参照动作可以是拒绝、级联、置空值、置缺省值之一 --关系SC中(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码定义SC中的参照完整性 create table SC( Sno char(9) not null, Cno char(4) not null, Grade int, primary key (Sno, Cno), /*在表级定义实体完整性*/ foreign key (Sno) references Student(SNO), /*在表级定义参照完整性*/ foreign key (Cno) references Course(Cno) /*在表级定义参照完整性*/ ); ①参照完整性规则:参照关系R的任何元组在其外码FKR上的值或者等于被参照关系S的某个元组在主码Ks上的值,或者为空值 ②违反参照完整性的更新向参照表(外键(foreign key)在的表,如:Sno , Cno)关系R中插入元组 修改参照表关系R外码上的值 删除被参照表(在 references 后面的表,如:Student)关系S的元组 修改被参照表(在 references 后面的表,如:Course)关系S主码上的值 ③违约处理(违背完整性约束条件)向参照关系R插入元组:拒绝( 默认 ) 修改参照关系R外码上的值:拒绝( 默认 ) 删除被参照关系S的元组:拒绝/级联( cascade )删除/置空值( set-null )/置缺省值 修改被参照关系S主码上的值:拒绝/级联删除( cascade )/置空值( set-null )/置缺省值 ④SQL中的参照完整性 外码可以在创建基本表时用FOREIGN KEY子句说明, 形式为: FOREIGN KEY (A1,…, Ak) REFERENCES () [] 指:当修改和删除违反参照完整性约束时触发的动作( 缺省值,违反参照完整性的修改和删除将被拒绝 ) 可以是如下两种形式之一:ON UPDATE [ON DELETE ] ONDELETE [ON UPDATE ] 其中可以是CASCADE、SET NULL、SET DEFAULT和NO ACTION 之一,分别表示级联、置空值、置缺省值和拒绝 ON DELETE 缺省时,违反参照完整性的删除将被拒绝 ON UPDATE缺省时,违反参照完整性的修改将被拒绝 eg: 如果我们希望在更新Students元组的主码时同时修改相应的SC元组的外码Sno,删除Students的元组时同时删除相应的SC元组; 而更新Courses的元组时同时修改相应的SC元组的外码Cno,但不允许删除Courses的元组破坏参照完整性,则我们可以用如下语句创建基本表SC: CREATE TABLE SC (Sno CHAR (9) not null, Cno CHAR (5) not null, Grade SMALLINT CHECK (Grade>=0 AND Grade |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |